Add patch for endianness issues
authorJochen Sprickerhof <git@jochen.sprickerhof.de>
Fri, 7 Aug 2020 09:21:28 +0000 (11:21 +0200)
committerJochen Sprickerhof <git@jochen.sprickerhof.de>
Fri, 7 Aug 2020 09:25:24 +0000 (11:25 +0200)
debian/patches/618.patch [new file with mode: 0644]
debian/patches/series
debian/rules

diff --git a/debian/patches/618.patch b/debian/patches/618.patch
new file mode 100644 (file)
index 0000000..c90400b
--- /dev/null
@@ -0,0 +1,141 @@
+From ba6a359d7be51ee1d0a553cc584103395675ea8e Mon Sep 17 00:00:00 2001
+From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
+Date: Thu, 6 Aug 2020 08:23:11 -0600
+Subject: [PATCH] fix endianness/packing issues with energympro,
+ globalsat_sport.
+
+this was motivated by test failures seen at
+https://buildd.debian.org/status/fetch.php?pkg=gpsbabel&arch=s390x&ver=1.7.0%2Bds-3&stamp=1594393020&raw=0
+---
+ energympro.cc      | 58 ++++++++++++++++++++++++++++++++++++++++------
+ energympro.h       |  2 +-
+ globalsat_sport.cc |  6 ++---
+ 3 files changed, 55 insertions(+), 11 deletions(-)
+
+diff --git a/energympro.cc b/energympro.cc
+index 2695a8f52..978052a18 100644
+--- a/energympro.cc
++++ b/energympro.cc
+@@ -33,7 +33,7 @@
+ #include "defs.h"
+ #include "energympro.h"
+-#include "gbfile.h"             // for gbfgetc, gbfseek, gbfclose, gbfopen, gbfread, gbfgetuint32, gbfcopyfrom, gbfgetuint16, gbfile, gbsize_t
++#include "gbfile.h"             // for gbfgetc, gbfgetuint16, gbfgetuint32, gbfseek, gbfgetint16, gbfclose, gbfopen, gbfcopyfrom, gbfile, gbsize_t
+ #include "src/core/datetime.h"  // for DateTime
+@@ -46,22 +46,48 @@ void
+ EnergymproFormat::read_point(route_head* gpsbabel_route, gpsbabel::DateTime& gpsDateTime) const
+ {
+   tw_point point{};
+-  gbfread(&point, sizeof(tw_point), 1, file_in);
++  point.Latitude = gbfgetuint32(file_in);
++  point.Longitude = gbfgetuint32(file_in);
++  point.Altitude = gbfgetint16(file_in);
++  point.reserved1 = gbfgetuint16(file_in);
++  point.Speed = gbfgetuint32(file_in);
++  point.IntervalDist = gbfgetuint16(file_in);
++  point.reserved2 = gbfgetuint16(file_in);
++  point.IntervalTime = gbfgetuint32(file_in);
++  point.Status = gbfgetc(file_in);
++  point.HR_Heartrate = gbfgetc(file_in);
++  point.HR_Status = gbfgetc(file_in);
++  point.reserved3 = gbfgetc(file_in);
++  point.Speed_Speed = gbfgetuint32(file_in);
++  point.Speed_Status = gbfgetc(file_in);
++  point.reserved4 = gbfgetc(file_in);
++  point.reserved5 = gbfgetc(file_in);
++  point.reserved6 = gbfgetc(file_in);
++  point.Cadence_Cadence = gbfgetc(file_in);
++  point.Cadence_Status = gbfgetc(file_in);
++  point.Power_Cadence = gbfgetuint16(file_in);
++  point.Power_Power = gbfgetuint16(file_in);
++  point.Power_Status = gbfgetc(file_in);
++  point.reserved7 = gbfgetc(file_in);
++  point.Temp = gbfgetc(file_in);
++  point.reserved8 = gbfgetc(file_in);
++  point.reserved9 = gbfgetc(file_in);
++  point.reserved10 = gbfgetc(file_in);
+   if (global_opts.debug_level > 1) {
+     printf("Point: lat:%8u long:%8u alt:%8d ", point.Latitude, point.Longitude, point.Altitude);
+-    printf("speed:%6u dist:%5u time:%5u Status:%1u", point.Speed, point.IntervalDist, point.lntervalTime, point.Status);
++    printf("speed:%6u dist:%5u time:%5u Status:%1u", point.Speed, point.IntervalDist, point.IntervalTime, point.Status);
+     printf("HR:(%3d,%1d)", point.HR_Heartrate, point.HR_Status);
+     printf("Speed:(%8u,%1d)", point.Speed_Speed, point.Speed_Status);
+     printf("Cad:(%3d,%1d)", point.Cadence_Cadence, point.Cadence_Status);
+     printf("Power (Cad:%6d Pow:%6d,%2d)Temp:%3d\n", point.Power_Cadence, point.Power_Power, point.Power_Status, point.Temp);
+     qDebug() << "DateTime1:" << gpsDateTime.toString();
+-    qDebug() << "point.lntervalTime:" << point.lntervalTime;
++    qDebug() << "point.IntervalTime:" << point.IntervalTime;
+   }
+-  //Time from last point in sec's * 10 (e.g. point.lntervalTime is sec multiplied with 10)
++  //Time from last point in sec's * 10 (e.g. point.IntervalTime is sec multiplied with 10)
+   // convert to millisecs
+-  gpsDateTime = gpsDateTime.addMSecs(point.lntervalTime*100);
++  gpsDateTime = gpsDateTime.addMSecs(point.IntervalTime*100);
+   auto waypt = new Waypoint;
+   waypt->latitude = (point.Latitude / 1000000.0);
+@@ -95,7 +121,25 @@ void
+ EnergymproFormat::read_lap() const
+ {
+   tw_lap lap{};
+-  gbfread(&lap, sizeof(tw_lap), 1, file_in);
++  lap.splitTime = gbfgetuint32(file_in);
++  lap.TotalTime = gbfgetuint32(file_in);
++  lap.Number = gbfgetuint16(file_in);
++  lap.reserved1 = gbfgetuint16(file_in);
++  lap.lDistance = gbfgetuint32(file_in);
++  lap.Calorie = gbfgetuint16(file_in);
++  lap.reserved2 = gbfgetuint16(file_in);
++  lap.MaxSpeed = gbfgetuint32(file_in);
++  lap.AvgSpeed = gbfgetuint32(file_in);
++  lap.MaxHeartrate = gbfgetc(file_in);
++  lap.AvgHeartrate = gbfgetc(file_in);
++  lap.MinAlti = gbfgetint16(file_in);
++  lap.MaxAlti = gbfgetint16(file_in);
++  lap.AvgCad = gbfgetc(file_in);
++  lap.MaxCad = gbfgetc(file_in);
++  lap.AvgPower = gbfgetuint16(file_in);
++  lap.MaxPower = gbfgetuint16(file_in);
++  lap.StartRecPt = gbfgetuint16(file_in);
++  lap.FinishRecPt = gbfgetuint16(file_in);
+   if (global_opts.debug_level > 1) {
+     printf("LAP: splitTime:%6us TotalTime:%6us LapNumber:%5d ", lap.splitTime/10, lap.TotalTime/10, lap.Number);
+     printf("dist:%08um Cal:%5u Speed:(%6u,%6u) ", lap.lDistance, lap.Calorie, lap.MaxSpeed, lap.AvgSpeed);
+diff --git a/energympro.h b/energympro.h
+index 18403fb1d..d5e9a5996 100644
+--- a/energympro.h
++++ b/energympro.h
+@@ -119,7 +119,7 @@ class EnergymproFormat : public Format
+     uint32_t  Speed;
+     uint16_t  IntervalDist;          // Interval Distance
+     uint16_t  reserved2;
+-    uint32_t  lntervalTime;          // Interval time
++    uint32_t  IntervalTime;          // Interval time
+     uint8_t   Status;                //Status (0 = ok, 1 = miss, 2 = no good, 3 = bad)
+     uint8_t   HR_Heartrate;
+     uint8_t   HR_Status;
+diff --git a/globalsat_sport.cc b/globalsat_sport.cc
+index 269c55e27..af755f97b 100644
+--- a/globalsat_sport.cc
++++ b/globalsat_sport.cc
+@@ -120,12 +120,12 @@ GlobalsatSportFormat::recv_byte()
+   if (!opt_input_dump_file) {
+     result=serial_recv_byte();
+   } else {
+-    int bytes = gbfread(&result, 1, 1, in_file);
+-    is_fatal((bytes != 1), MYNAME ": read error");
++    result = gbfgetc(in_file);
++    is_fatal((result < 0), MYNAME ": read error");
+   }
+   // Check if byte should be dumped also into a file
+   if (dumpfile) {
+-    gbfwrite(&result, 1, 1, dumpfile);
++    gbfputc(result, dumpfile);
+   }
+   return result;
+ }
index 9eeb150ed28bcf825888de7febc2039eca005e1d..3457dce87c39c0f8ace44f643631fc0b4c622ec5 100644 (file)
@@ -7,3 +7,4 @@ htmldoc-location
 cross.patch
 gmapbase.html-location
 0009-Drop-mac-libusb-libusb.h-dependency.patch
+618.patch
index 056b7a235fb0b27bbaa56bba0fa5fa4561660098..64a8c87cba7960e165248ff04d53b1f375258f19 100755 (executable)
@@ -31,7 +31,7 @@ override_dh_auto_build-indep:
 
 # Ignore broken unit tests on some architectures
 override_dh_auto_test:
-ifneq (,$(filter $(DEB_BUILD_ARCH),i386 s390x sparc64))
+ifneq (,$(filter $(DEB_BUILD_ARCH),i386))
        dh_auto_test || true
 else
        dh_auto_test